JiGeng
创建时间:2024年9月27日 05:04
编辑时间:2024年9月27日 05:31
nginx与wsgi的本地应用,通过gunicorn或uwsgi启动更直观地了解是什么
nginx 安装 brew apt-get yum 都可以,忽略,或者源码包编译。
nginx在mac下默认端口是8080,只要启动nginx,127.0.0.1:8080或者localhost:8080 就会有nginx启动页面。
brew services start nginx # 以系统启动 nginx #或者直接nginx通过bin也可以启动
我们也可以到conf去修改。
以项目runserver为例,默认是8000,我们改为8080,
python manage.py runserver 0.0.0.0:8080
同样道理,如果我们用gunicorn启动
gunicorn t2t.wsgi:application -b :8080
会发现端口被占用
Error: That port is already in use.
结论:理解了吗?
对!应用项目、反向代理、wsgi中间沟通层不可直接启动,他们会占用同一个端口。
那么奇怪了,如何让他们一起启动到同一个URI端口?
这就必须要通过nginx、gunicorn的配置文件使得他们相互认识,并且协同处理同一个uri。
三者沟通原理就是这么简单。
好,那么为什么会出现wsgi(读作威士忌)
如同HTTP协议,wsgi也是一个协议,本身并不是可用的工具,而uwsgi和gunicorn才是工具——中间层。
关于协议,必定有不遵循协议的,wsgi特指Python社区严格定义的协议,部分框架是遵守的,如Django、flask、tornado等等这类统称为Paster应用项目(原因是早期有个这种项目最早最完整遵循了wsgi原则),所以在uwsgi和gunicorn文档会特别指明需要时paster应用才好使用此中间工具。当然也有部分不遵守,比如特殊的需求,或者自行手搓wsgi也是可以的。
# 用户获取信息:用户》浏览器》反向代理Nginx》wsgi协议沟通工具(gunicorn、uwsgi)》应用服务Django》数据库。反之亦然 同理,用户读写信息也是如此。 #
而反向代理和应用服务一般是无法沟通的,所以在HTTP协议约束下、应用编写代码约束下、反向代理约束下形成了一个伟大的沟通协议(超级翻译机)———— wsgi 。
所以后端工程师就可以集中精力在构建应用、编写代码而不是处理如何与反向代理沟通。